package com.itcam.lease.common.sms;

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.teaopenapi.models.Config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration // 表明这是一个配置类
@EnableConfigurationProperties(AliyunSMSProperties.class) // 启用 AliyunSMSProperties 配置属性
@ConditionalOnProperty(prefix = "aliyun.sms", name = "endpoint") // 当配置文件中存在 aliyun.sms.endpoint 属性时，该配置类才会生效
public class AliyunSMSConfiguration {

    @Autowired // 自动注入 AliyunSMSProperties
    private AliyunSMSProperties properties;

    /**
     * 创建阿里云短信服务客户端 bean
     *
     * @return 阿里云短信服务客户端实例
     */
    @Bean // 声明这是一个 bean 方法
    public Client smsClient() {
        Config config = new Config();
        // 设置访问密钥 ID
        config.setAccessKeyId(properties.getAccessKeyId());
        // 设置访问密钥密钥
        config.setAccessKeySecret(properties.getAccessKeySecret());
        // 设置短信服务的终端节点
        config.setEndpoint(properties.getEndpoint());
        try {
            // 创建并返回短信服务客户端实例
            return new Client(config);
        } catch (Exception e) {
            // 捕获异常并重新抛出运行时异常
            throw new RuntimeException(e);
        }
    }
}
